<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2016 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: 流年 <liu21st@gmail.com>
// +----------------------------------------------------------------------

// 应用公共文件
//当函数不存在的时候才去创建
if (!function_exists('randstr')) {
    /**
     * 获得随机字符串
     * @param $len             需要的长度
     * @param $special        是否需要特殊符号
     * @return string       返回随机字符串
     */
    function randstr($len = 8, $special = false)
    {
        $chars = array(
            "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k",
            "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v",
            "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G",
            "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R",
            "S", "T", "U", "V", "W", "X", "Y", "Z", "0", "1", "2",
            "3", "4", "5", "6", "7", "8", "9"
        );

        if ($special) {
            $chars = array_merge($chars, array(
                "!", "@", "#", "$", "?", "|", "{", "/", ":", ";",
                "%", "^", "&", "*", "(", ")", "-", "_", "[", "]",
                "}", "<", ">", "~", "+", "=", ",", "."
            ));
        }

        $charsLen = count($chars) - 1;
        shuffle($chars);                            //打乱数组顺序
        $str = '';
        for ($i = 0; $i < $len; $i++) {
            $str .= $chars[mt_rand(0, $charsLen)];    //随机取出一位
        }
        return $str;
    }
}

//封装一个公共的上传文件的方法
//上传成功返回 相对路径  没上传成功返回 false
// 单张图片
function upload($name = "images")
{
    // 获取表单上传文件
    $file = request()->file($name);

    //如果有文件上传，在去移动文件
    if ($file) {
        // DS  == /
        // ROOT_PATH  == 项目目录  ask/public/uploads/ 
        $info = $file->validate(['ext' => 'jpg,jpeg,png,gif'])
            ->move(ROOT_PATH . 'public' . DS . 'uploads');

        //判断是否上传成功
        if ($info) {
            //返回路径+文件名
            return str_replace("\\", "/", $info->getSaveName());
        } else {
            return false;
        }
    }

    return false;
}


// 多张图片
function uploads($name = "images")
{
    // 获取表单上传文件
    $files = request()->file($name);

    // 封装上传图片的数组
    $list = [];
    

    foreach ($files as $file) {
        if ($file) {

            $info = $file->validate(['ext' => 'jpg,jpeg,png,gif'])
                ->move(ROOT_PATH . 'public' . DS . 'uploads');

            //判断是否上传成功
            if ($info) {
                //返回路径+文件名
                $list[] = "/uploads/" . str_replace("\\", "/", $info->getSaveName());
            }
        }
    }

    //返回一个数组结构
    return $list;
}


//引入邮箱发送拓展
use PHPMailer\PHPMailer;


//发送邮件 格式和信息
function email($email, $content)
{
    //发件人信息
    $SendMail = "z2200344475@163.com";
    $SendPass = "NTSKPHLUHNMABHQN";
    $SendName = "钟生社区论坛【官方】";
    //实例化邮箱发送的对象
    $mail = new PHPMailer();

    $mail->isSMTP(); // 使用SMTP服务
    $mail->CharSet = "utf8"; // 编码格式为utf8，不设置编码的话，中文会出现乱码
    $mail->Host = "smtp.163.com"; // 发送方的SMTP服务器地址
    $mail->SMTPAuth = true; // 是否使用身份验证
    $mail->Username = $SendMail; //发送方的邮箱
    $mail->Password = $SendPass; //客户端授权密码,而不是邮箱的登录密码！
    // $mail->SMTPSecure = "ssl";// 使用ssl协议方式
    $mail->Port = 25; // 服务器端口 25 或者465 具体要看邮箱服务器支持

    $mail->setFrom($SendMail, $SendName); // 设置发件人信息，如邮件格式说明中的发件人，

    $mail->addAddress($email); // 设置收件人信息，如邮件格式说明中的收件人，
    $mail->addReplyTo($SendMail, $SendName); // 设置回复人信息，指的是收件人收到邮件后，如果要回复，回复邮件将发送到的邮箱地址
    $mail->Subject = "邮箱认证"; // 邮件标题
    $mail->Body = $content; // 邮件正文
    $mail->AltBody = $content; // 这里可以设置也可以隐藏掉,隐藏掉以后我的html的内容不能识别,打开后正常,所以这里我是打开的状态
    if ($mail->send()) {
        return true;
    } else {
        echo  $mail->ErrorInfo; // 输出错误信息
        // return false;
    }
}

//发送找回邮件 格式和信息
function retr($email, $content)
{
    //发件人信息
    $SendMail = "z2200344475@163.com";
    $SendPass = "NTSKPHLUHNMABHQN";
    $SendName = "找回密码";
    //实例化邮箱发送的对象
    $mail = new PHPMailer();

    $mail->isSMTP(); // 使用SMTP服务
    $mail->CharSet = "utf8"; // 编码格式为utf8，不设置编码的话，中文会出现乱码
    $mail->Host = "smtp.163.com"; // 发送方的SMTP服务器地址
    $mail->SMTPAuth = true; // 是否使用身份验证
    $mail->Username = $SendMail; //发送方的邮箱
    $mail->Password = $SendPass; //客户端授权密码,而不是邮箱的登录密码！
    // $mail->SMTPSecure = "ssl";// 使用ssl协议方式
    $mail->Port = 25; // 服务器端口 25 或者465 具体要看邮箱服务器支持

    $mail->setFrom($SendMail, $SendName); // 设置发件人信息，如邮件格式说明中的发件人，

    $mail->addAddress($email); // 设置收件人信息，如邮件格式说明中的收件人，
    $mail->addReplyTo($SendMail, $SendName); // 设置回复人信息，指的是收件人收到邮件后，如果要回复，回复邮件将发送到的邮箱地址
    $mail->Subject = "找回密码"; // 邮件标题
    $mail->Body = $content; // 邮件正文
    $mail->AltBody = $content; // 这里可以设置也可以隐藏掉,隐藏掉以后我的html的内容不能识别,打开后正常,所以这里我是打开的状态
    if ($mail->send()) {
        return true;
    } else {
        echo  $mail->ErrorInfo; // 输出错误信息
        // return false;
    }
}


/**
 * 二维数组按照指定字段进行排序
 * @params array $array 需要排序的数组
 * @params string $field 排序的字段
 * @params string $sort 排序顺序标志 SORT_DESC 降序；SORT_ASC 升序
 */
function ArraySequence($array, $field, $sort = 'SORT_DESC')
{
    $arrSort = array();
    foreach ($array as $uniqid => $row) {
        foreach ($row as $key => $value) {
            $arrSort[$key][$uniqid] = $value;
        }
    }

    array_multisort($arrSort[$field], constant($sort), $array);
    return $array;
}
